// noinspection JSUnresolvedReference /** * Field Google Map */ /* global jQuery, document, redux_change, redux, google */ (function ( $ ) { 'use strict'; redux.field_objects = redux.field_objects || {}; redux.field_objects.google_maps = redux.field_objects.google_maps || {}; /* LIBRARY INIT */ redux.field_objects.google_maps.init = function ( selector ) { if ( ! selector ) { selector = $( document ).find( '.redux-group-tab:visible' ).find( '.redux-container-google_maps:visible' ); } $( selector ).each( function ( i ) { let delayRender; const el = $( this ); let parent = el; if ( ! el.hasClass( 'redux-field-container' ) ) { parent = el.parents( '.redux-field-container:first' ); } if ( parent.is( ':hidden' ) ) { return; } if ( parent.hasClass( 'redux-field-init' ) ) { parent.removeClass( 'redux-field-init' ); } else { return; } // Check for delay render, which is useful for calling a map // render after JavaScript load. delayRender = Boolean( el.find( '.redux_framework_google_maps' ).data( 'delay-render' ) ); // API Key button. redux.field_objects.google_maps.clickHandler( el ); // Init our maps. redux.field_objects.google_maps.initMap( el, i, delayRender ); } ); }; /* INIT MAP FUNCTION */ redux.field_objects.google_maps.initMap = async function ( el, idx, delayRender ) { let delayed; let scrollWheel; let streetView; let mapType; let address; let defLat; let defLong; let defaultZoom; let mapOptions; let geocoder; let g_autoComplete; let g_LatLng; let g_map; let noLatLng = false; // Pull the map class. const mapClass = el.find( '.redux_framework_google_maps' ); const containerID = mapClass.attr( 'id' ); const autocomplete = containerID + '_autocomplete'; const canvas = containerID + '_map_canvas'; const canvasId = $( '#' + canvas ); const latitude = containerID + '_latitude'; const longitude = containerID + '_longitude'; // Add map index to data attr. // Why, say we want to use delay_render, // and want to init the map later on. // You'd need the index number in the // event of multiple map instances. // This allows one to retrieve it // later. $( mapClass ).attr( 'data-idx', idx ); if ( true === delayRender ) { return; } // Map has been rendered, no need to process again. if ( $( '#' + containerID ).hasClass( 'rendered' ) ) { return; } // If a map is set to delay render and has been initiated // from another scrip, add the 'render' class so rendering // does not occur. // It messes things up. delayed = Boolean( mapClass.data( 'delay-render' ) ); if ( true === delayed ) { mapClass.addClass( 'rendered' ); } // Create the autocomplete object, restricting the search // to geographical location types. g_autoComplete = await google.maps.importLibrary( 'places' ); g_autoComplete = new google.maps.places.Autocomplete( document.getElementById( autocomplete ), {types: ['geocode']} ); // Data bindings. scrollWheel = Boolean( mapClass.data( 'scroll-wheel' ) ); streetView = Boolean( mapClass.data( 'street-view' ) ); mapType = Boolean( mapClass.data( 'map-type' ) ); address = mapClass.data( 'address' ); address = decodeURIComponent( address ); address = address.trim(); // Set default Lat/lng. defLat = canvasId.data( 'default-lat' ); defLong = canvasId.data( 'default-long' ); defaultZoom = canvasId.data( 'default-zoom' ); // Eval whether to set maps based on lat/lng or address. if ( '' !== address ) { if ( '' === defLat || '' === defLong ) { noLatLng = true; } } else { noLatLng = false; } // Can't have empty values, or the map API will complain. // Set default for the middle of the United States. defLat = defLat ? defLat : 39.11676722061108; defLong = defLong ? defLong : -100.47761000000003; if ( noLatLng ) { // If displaying a map based on an address. geocoder = new google.maps.Geocoder(); // Set up Geocode and pass address. geocoder.geocode( {'address': address}, function ( results, status ) { let latitude; let longitude; // Function results. if ( status === google.maps.GeocoderStatus.OK ) { // A good address was passed. g_LatLng = results[0].geometry.location; // Set map options. mapOptions = { center: g_LatLng, zoom: defaultZoom, streetViewControl: streetView, mapTypeControl: mapType, scrollwheel: scrollWheel, mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR, position: google.maps.ControlPosition.LEFT_BOTTOM }, mapId: 'REDUX_GOOGLE_MAPS', }; // Create map. g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions ); // Get and set lat/long data. latitude = el.find( '#' + containerID + '_latitude' ); latitude.val( results[0].geometry.location.lat() ); longitude = el.find( '#' + containerID + '_longitude' ); longitude.val( results[0].geometry.location.lng() ); redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ); } else { // No data found, alert the user. alert( 'Geocode was not successful for the following reason: ' + status ); } } ); } else { // If displaying map based on an lat/lng. g_LatLng = new google.maps.LatLng( defLat, defLong ); // Set map options. mapOptions = { center: g_LatLng, zoom: defaultZoom, // Start off far unless an item is selected, set by php. streetViewControl: streetView, mapTypeControl: mapType, scrollwheel: scrollWheel, mapTypeControlOptions: { style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR, position: google.maps.ControlPosition.LEFT_BOTTOM }, mapId: 'REDUX_GOOGLE_MAPS', }; // Create the map. g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions ); redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ); } }; redux.field_objects.google_maps.renderControls = function ( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ) { let markerTooltip; let infoWindow; let g_marker; let geoAlert = mapClass.data( 'geo-alert' ); // Get HTML. const input = document.getElementById( autocomplete ); // Set objects into the map. g_map.controls[google.maps.ControlPosition.TOP_LEFT].push( input ); // Bind objects to the map. g_autoComplete = new google.maps.places.Autocomplete( input ); g_autoComplete.bindTo( 'bounds', g_map ); // Get the marker tooltip data. markerTooltip = mapClass.data( 'marker-tooltip' ); markerTooltip = decodeURIComponent( markerTooltip ); // Create infoWindow. infoWindow = new google.maps.InfoWindow(); // Create marker. g_marker = new google.maps.Marker( { position: g_LatLng, map: g_map, anchorPoint: new google.maps.Point( 0, - 29 ), draggable: true, title: markerTooltip, animation: google.maps.Animation.DROP } ); geoAlert = decodeURIComponent( geoAlert ); // Place change. google.maps.event.addListener( g_autoComplete, 'place_changed', function () { let place; let address; let markerTooltip; infoWindow.close(); // Get place data. place = g_autoComplete.getPlace(); // Display alert if something went wrong. if ( ! place.geometry ) { window.alert( geoAlert ); return; } console.log( place.geometry.viewport ); // If the place has a geometry, then present it on a map. if ( place.geometry.viewport ) { g_map.fitBounds( place.geometry.viewport ); } else { g_map.setCenter( place.geometry.location ); g_map.setZoom( 17 ); // Why 17? Because it looks good. } markerTooltip = mapClass.data( 'marker-tooltip' ); markerTooltip = decodeURIComponent( markerTooltip ); // Set the marker icon. g_marker = new google.maps.Marker( { position: g_LatLng, map: g_map, anchorPoint: new google.maps.Point( 0, - 29 ), title: markerTooltip, clickable: true, draggable: true, animation: google.maps.Animation.DROP } ); // Set marker position and display. g_marker.setPosition( place.geometry.location ); g_marker.setVisible( true ); // Form array of address components. address = ''; if ( place.address_components ) { address = [( place.address_components[0] && place.address_components[0].short_name || '' ), ( place.address_components[1] && place.address_components[1].short_name || '' ), ( place.address_components[2] && place.address_components[2].short_name || '' )].join( ' ' ); } // Set the default marker info window with address data. infoWindow.setContent( '
' + place.name + '
' + address ); infoWindow.open( g_map, g_marker ); // Run Geolocation. redux.field_objects.google_maps.geoLocate( g_autoComplete ); // Fill in address inputs. redux.field_objects.google_maps.fillInAddress( el, latitude, longitude, g_autoComplete ); } ); // Marker drag. google.maps.event.addListener( g_marker, 'drag', function ( event ) { document.getElementById( latitude ).value = event.latLng.lat(); document.getElementById( longitude ).value = event.latLng.lng(); } ); // End marker drag. google.maps.event.addListener( g_marker, 'dragend', function () { redux_change( el.find( '.redux_framework_google_maps' ) ); } ); // Zoom Changed. g_map.addListener( 'zoom_changed', function () { el.find( '.google_m_zoom_input' ).val( g_map.getZoom() ); } ); // Marker Info Window. infoWindow = new google.maps.InfoWindow(); google.maps.event.addListener( g_marker, 'click', function () { const marker_info = containerID + '_marker_info'; const infoValue = document.getElementById( marker_info ).value; if ( '' !== infoValue ) { infoWindow.setContent( infoValue ); infoWindow.open( g_map, g_marker ); } } ); }; /* FILL IN ADDRESS FUNCTION */ redux.field_objects.google_maps.fillInAddress = function ( el, latitude, longitude, g_autoComplete ) { // Set variables. const containerID = el.find( '.redux_framework_google_maps' ).attr( 'id' ); // What if someone only wants city, or state, ect... // gotta do it this way to check for the address! // Need to check each of the returned components to see what is returned. const componentForm = { street_number: 'short_name', route: 'long_name', locality: 'long_name', administrative_area_level_1: 'short_name', country: 'long_name', postal_code: 'short_name' }; // Get the place details from the autocomplete object. const place = g_autoComplete.getPlace(); let component; let i; let addressType; let _d_addressType; let val; let len; document.getElementById( latitude ).value = place.geometry.location.lat(); document.getElementById( longitude ).value = place.geometry.location.lng(); for ( component in componentForm ) { if ( componentForm.hasOwnProperty( component ) ) { // Push in the dynamic form element ID again. component = containerID + '_' + component; // Assign to proper place. document.getElementById( component ).value = ''; document.getElementById( component ).disabled = false; } } // Get each component of the address from the place details // and fill the corresponding field on the form. len = place.address_components.length; for ( i = 0; i < len; i += 1 ) { addressType = place.address_components[i].types[0]; if ( componentForm[addressType] ) { // Push in the dynamic form element ID again. _d_addressType = containerID + '_' + addressType; // Get the original. val = place.address_components[i][componentForm[addressType]]; // Assign to proper place. document.getElementById( _d_addressType ).value = val; } } }; redux.field_objects.google_maps.geoLocate = function ( g_autoComplete ) { if ( navigator.geolocation ) { navigator.geolocation.getCurrentPosition( function ( position ) { const geolocation = new google.maps.LatLng( position.coords.latitude, position.coords.longitude ); const circle = new google.maps.Circle( { center: geolocation, radius: position.coords.accuracy } ); g_autoComplete.setBounds( circle.getBounds() ); } ); } }; /* API BUTTON CLICK HANDLER */ redux.field_objects.google_maps.clickHandler = function ( el ) { // Find the API Key button and react on click. el.find( '.google_m_api_key_button' ).on( 'click', function () { // Find message wrapper. const wrapper = el.find( '.google_m_api_key_wrapper' ); if ( wrapper.is( ':visible' ) ) { // If the wrapper is visible, close it. wrapper.slideUp( 'fast', function () { el.find( '#google_m_api_key_input' ).trigger( 'focus' ); } ); } else { // If the wrapper is visible, open it. wrapper.slideDown( 'medium', function () { el.find( '#google_m_api_key_input' ).trigger( 'focus' ); } ); } } ); el.find( '.google_m_autocomplete' ).on( 'keypress', function ( e ) { if ( 13 === e.keyCode ) { e.preventDefault(); } } ); // Auto select autocomplete contents, // since Google doesn't do this inherently. el.find( '.google_m_autocomplete' ).on( 'click', function ( e ) { $( this ).trigger( 'focus' ); $( this ).trigger( 'select' ); e.preventDefault(); } ); }; } )( jQuery ); Exploring the Exciting Game Range at WinSpirit Online Casino Australia – Orchid Group
Warning: Undefined variable $encoded_url in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54

Deprecated: base64_decode(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54

Exploring the Exciting Game Range at WinSpirit Online Casino Australia

Welcome to WinSpirit Casino, your ultimate destination for an unparalleled gaming experience. Whether you’re a seasoned player or new to the world of online casinos, ws casino offers a diverse game range that caters to every taste and preference.

Explore the excitement of WinSpirit Casino with hundreds of games, from classic slots to live dealer tables. With the WinSpirit app, you can enjoy your favorite games anytime, anywhere. Dive into the action and see why WinSpirit Casino reviews praise its seamless gameplay and generous rewards.

Join Win-Spirit today and experience the magic of winspirit.com. Your next big win is just a click away!

Discover the Exciting World of WinSpirit Online Casino

Welcome to WinSpirit Casino, where the thrill of gaming meets unmatched excitement! Whether you’re a seasoned player or new to online casinos, WinSpirit offers a world of entertainment at your fingertips. Dive into a vast selection of games, from slots to table games, all designed to keep you engaged and entertained.

Feature
Description

Game Variety Explore hundreds of games, including slots, poker, roulette, and more at WinSpirit Casino. winspirit bonus code Unlock exclusive rewards and boost your gameplay with special WinSpirit bonus codes. WinSpirit App Enjoy seamless gaming on the go with the WinSpirit app, available for both iOS and Android. WinSpirit Casino Reviews Read what players are saying about their experiences at WS Casino and join the winning community.

At WinSpirit.com, every spin, bet, and win is designed to bring you closer to the ultimate gaming experience. Don’t miss out on the action – join Win-Spirit today and start your journey to big wins!

Explore a Wide Variety of Casino Games

At WinSpirit Casino, players can dive into an extensive selection of games designed to cater to every taste. Whether you’re a fan of classic slots, table games, or live dealer experiences, ws casino has something for everyone. Discover the thrill of spinning the reels or testing your skills at blackjack and roulette.

With the WinSpirit app, you can enjoy your favorite games anytime, anywhere. The platform is optimized for seamless gameplay, ensuring a smooth experience on both desktop and mobile devices. Check out WinSpirit casino reviews to see why players love the diverse game range and user-friendly interface.

New players can take advantage of exclusive offers with a WinSpirit bonus code, unlocking extra rewards to enhance their gaming journey. From high-quality graphics to immersive sound effects, every detail at Win-Spirit is crafted to provide an unforgettable experience.

Join Win Spirit Casino today and explore a world of entertainment. Whether you’re a seasoned player or just starting, WinSpirit.com offers endless opportunities to win big and have fun. Don’t miss out on the excitement – your next favorite game is just a click away!

Experience Top-Quality Slot Machines

At WinSpirit Online Casino Australia, immerse yourself in a world of premium slot machines designed for every player. Whether you’re a fan of classic reels or modern video slots, WS Casino offers an extensive collection to keep you entertained. Explore the WinSpirit app for seamless gameplay on the go, or visit WinSpirit.com to dive into the action from your desktop.

Unlock exclusive rewards with the WinSpirit bonus code, enhancing your chances to win big. The Win-Spirit platform ensures a smooth and secure gaming experience, while the Win Spirit Casino library features games from top providers. Don’t miss out on the thrill – join Winsprit today and spin your way to exciting prizes!

Enjoy Live Dealer Games for Real-Time Thrills

Experience the ultimate gaming excitement with WinSpirit Casino’s live dealer games. Immerse yourself in real-time action and interact with professional dealers from the comfort of your home. Whether you’re a fan of blackjack, roulette, or baccarat, WinSpirit.com offers a wide range of live games to suit every player’s taste.

  • Play directly on the WinSpirit app for seamless access to live tables.
  • Enjoy exclusive promotions with the WinSpirit bonus code for live dealer games.
  • Discover the thrill of real-time gameplay at WS Casino with HD streaming.

At Win-Spirit, we bring the casino floor to your screen. Join Win Spirit Casino today and elevate your gaming experience with our top-rated live dealer options. Don’t miss out on the action – download the WinSprit app or visit WinSpirit.com now!

Win Big with Progressive Jackpots

At WinSpirit Casino, the thrill of winning big is just a spin away! Our progressive jackpots offer life-changing prizes that grow with every bet placed. Whether you’re playing on the WinSpirit app or directly on winspirit.com, you’ll have access to some of the most exciting jackpot games available.

  • Massive Prizes: Our progressive jackpots start at thousands and can reach millions. The more you play, the bigger the prize!
  • Popular Games: Enjoy a wide range of jackpot slots, including fan favorites like Mega Moolah and Divine Fortune.
  • Easy Access: Play anytime, anywhere with the Win-Spirit platform, designed for seamless gaming on all devices.

Looking for tips to boost your chances? Check out WinSpirit Casino reviews from fellow players or use the latest WinSpirit bonus code to maximize your spins. At WS Casino, your next big win could be just around the corner!

  • Sign up or log in to your WinSpirit account.
  • Explore the progressive jackpot section.
  • Start spinning and chase that life-changing prize!
  • Join WinSprit today and experience the excitement of progressive jackpots like never before. Your big win is waiting!

    Play Anytime, Anywhere with Mobile Compatibility

    Experience the thrill of ws casino on the go! With the winspirit app, you can enjoy your favorite games anytime, anywhere. Whether you’re at home or on the move, winspirit casino ensures seamless gameplay on your mobile device.

    Discover the convenience of win-spirit mobile compatibility, designed to bring the excitement of win spirit casino to your fingertips. Don’t forget to use your winspirit bonus code for exclusive rewards while playing on the winspirit.com platform.

    Join the growing community of players who trust winspirit casino reviews and elevate your gaming experience with the ultimate flexibility of mobile play!

    Secure and Fair Gaming Environment

    At WinSpirit Online Casino Australia, we prioritize your safety and trust. Our platform, winspirit.com, is built with advanced encryption technology to ensure all your transactions and personal data are secure. Whether you’re using the WinSpirit app or playing on desktop, you can enjoy peace of mind knowing your information is protected.

    We are committed to fair play. Our games are regularly audited by independent agencies to guarantee transparency and fairness. With a wide game range and a WinSpirit bonus code, you can experience thrilling gameplay while knowing every outcome is random and unbiased.

    Don’t just take our word for it–check out WinSpirit casino reviews to see why players trust Win-Spirit for a secure and enjoyable gaming experience. Join WS Casino today and play with confidence!

    Join WinSpirit Today and Start Winning!

    Experience the thrill of WinSpirit Casino, where excitement and big wins await! Whether you’re a seasoned player or new to online gaming, WinSpirit offers an unparalleled experience with its wide range of games and generous bonuses.

    Don’t miss out on the exclusive WinSpirit Bonus Code available at https://apfssh2020.org/. Use it to boost your bankroll and maximize your chances of winning. With the WinSpirit App, you can enjoy your favorite games anytime, anywhere, ensuring the fun never stops.

    Join the vibrant community of players who trust Win-Spirit for top-notch entertainment. Read the latest WinSpirit Casino Reviews to see why players love this platform. From seamless gameplay to secure transactions, WinSprit delivers it all.

    Sign up at WinSpirit Casino today and let the winning begin!

    Design and Develop by Ovatheme